|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(******************************************************************************) (**) ОТДЕЛ Секундомер+; (****************************************************************************** * НАЗНАЧЕНИЕ: пример использования наделов и времени ******************************************************************************) ИСПОЛЬЗУЕТ ОС ИЗ "...\Отделы\Обмен\", (* для считывания времени *) Окно ИЗ "...\Отделы\Обмен\", Ввод ИЗ "...\Отделы\Обмен\", Поле ИЗ "...\Отделы\Поле\", Подложка ИЗ "...\Отделы\Поле\", Записка ИЗ "...\Отделы\Поле\", Кнопка ИЗ "...\Отделы\Поле\", Черта ИЗ "...\Отделы\Поле\"; ПОСТ (* действия кнопок *) дПуск =1; дСтоп =2; дСброс=3; дВыход=4; ПЕР идётИзмерение:КЛЮЧ; (* ВКЛ, если идёт измерение времени *) измеренноеВремя:ЦЕЛ; (* промежуток времени в мс *) моментОбновления:ЦЕЛ; (* показаний *) зВремя:Записка.Доступ; (* записка с показаниями секундомера *) (******************************************************************************) ЗАДАЧА ОбновитьПоказания(номерЧасов:ЦЕЛ); (* обновить показания секундомера *) ПЕР сотые,секунды,минуты,часы:ЦЕЛ; сейчас:ЦЕЛ; прошлоВремени:ЦЕЛ; УКАЗ сейчас:=ОС.Время(); прошлоВремени:=сейчас-моментОбновления; моментОбновления:=сейчас; ЕСЛИ идётИзмерение ТО УВЕЛИЧИТЬ(измеренноеВремя,прошлоВремени) КОН; сотые:=измеренноеВремя ДЕЛИТЬ 10; секунды:=сотые ДЕЛИТЬ 100; минуты:=секунды ДЕЛИТЬ 60; часы:=минуты ДЕЛИТЬ 60; Записка.ИзЧЦел( зВремя,"%.2d:%.2d:%.2d.%.2d", часы,минуты ОСТАТОК 60, секунды ОСТАТОК 60, сотые ОСТАТОК 100 ) КОН ОбновитьПоказания; (******************************************************************************) ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка); (* получить и обработать управляющие послания *) УКАЗ ДЛЯ посылка ВИДА | Кнопка.Посылка: ВЫБРАТЬ посылка.кнопка.действие ИЗ | дПуск: идётИзмерение:=ВКЛ | дСтоп: идётИзмерение:=ОТКЛ | дСброс: измеренноеВремя:=0 | дВыход: поле.состояние:=Поле.сДалее КОН | Ввод.ОтКлавиш: ЕСЛИ посылка.упрАльт И (посылка.код=58H) (* Alt+'X' *) ИЛИ (посылка.код=1BH) (* Esc *) ТО поле.состояние:=Поле.сДалее КОН ИНАЧЕ КОН КОН Приём; (******************************************************************************) ЗАДАЧА Главная; ПЕР поле:Поле.Доступ; (* рабочее поле экрана *) подложка:Подложка.Доступ; (* подложка поля *) кнСтоп,кнПуск,кнСброс,кнВыход:Кнопка.Доступ; (* управляющие кнопки *) черта1,черта2:Черта.Доступ; (* разделительные черты *) часы:ЦЕЛ; (****************************************************************************) ЗАДАЧА СоздатьПоле; (* создаёт рабочее поле экрана с кнопками-наделами *) УКАЗ (* создаём поле экрана *) (* задача Приём *) поле:=Поле.Создать(0,0,8,17,ПУСТО,ОТКЛ,Приём); (* создаём наделы *) подложка:=Подложка.Создать(0,0,0,0,""); зВремя:=Записка.Создать(1,3,1,11,"00:00:00.00"); черта1:=Черта.Создать(2,0,1,0); кнПуск:=Кнопка.Создать(3,2,"[~Пуск]",дПуск,ВКЛ); кнСтоп:=Кнопка.Создать(3,9,"[~Стоп]",дСтоп,ВКЛ); кнСброс:=Кнопка.Создать(4,4,"[ С~брос ]",дСброс,ВКЛ); черта2:=Черта.Создать(5,0,1,0); кнВыход:=Кнопка.Создать(6,4,"[ ~Выход ]",дВыход,ВКЛ); (* добавляем наделы в порядке получения ввода *) Поле.ДобавитьНадел(поле,подложка); Поле.ДобавитьНадел(поле,зВремя); Поле.ДобавитьНадел(поле,черта1); Поле.ДобавитьНадел(поле,кнПуск); Поле.ДобавитьНадел(поле,кнСтоп); Поле.ДобавитьНадел(поле,кнСброс); Поле.ДобавитьНадел(поле,черта2); Поле.ДобавитьНадел(поле,кнВыход) КОН СоздатьПоле; УКАЗ (* задача ОбновитьПоказания *) Окно.Графическое("Секундомер","Lucida Console",30,ОбновитьПоказания); (* Окно.Текстовое(ОбновитьПоказания); *) СоздатьПоле; Поле.ОкноНаВсёПоле(поле); Поле.Рисовать(поле); часы:=Окно.СоздатьЧасы(1,100); (* обновляем показания через 100мс *) Окно.Показать; (* проверяем и обрабатываем ввод от человека *) ПОКА поле.состояние=Поле.сРабота ВЫП Поле.Проверить(поле) КОН; Окно.УдалитьЧасы(часы) КОН Главная; (******************************************************************************) УКАЗ измеренноеВремя:=0; идётИзмерение:=ОТКЛ; Главная КОН Секундомер. ▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|